<?php

include_once "Dpto.php";

class MapeadorDptos {
    
    private $mysqli;
    
    public function __construct() {
        $this->conectar();
    }
    
    private function conectar()
    {
        $this->mysqli = new mysqli("localhost", "root", "", "miniwf");
        
        if (mysqli_connect_errno()) {
            printf("Error al conectar: %s\n", mysqli_connect_error());
            exit;
        }
    }
    
    public function __destruct() {
        $this->mysqli->close();
    }
    
    /**
     * Realiza la persistencia del objeto departamento proporcionado como parámetro.
     *
     * @param Dpto $dpto
     */
    public function registrar(Dpto $dpto)
    {
        $cadenaConsulta = "INSERT INTO dpto VALUES ('"
            .$dpto->getId()."', '"
            .$dpto->getNombre()."', '"
            .$dpto->getDescripcion()."', '";
        if ($dpto->getDptoPadre() != NULL)
            $cadenaConsulta = $cadenaConsulta.$dpto->getDptoPadre()->getId();
        $cadenaConsulta = $cadenaConsulta."')";
        /*return */$this->mysqli->query($cadenaConsulta);
        if (mysqli_errno($this->mysqli)) {
            echo mysqli_error($this->mysqli);
        }
    }
    
    /**
     * Obtiene el departamento que tenga el codigo identificador proporcionado
     *
     * @param string $id
     * @return Dpto
     */
    public function obtenerPorId($id)
    {
        if ($result = $this->mysqli->query("SELECT * FROM 'dpto' WHERE id='"
                .$id."'")) {
            if ($obj = $result->fetch_object()) {
                $dpto = obtenerDpto($obj);
                return $dpto;
            }
        }
        
        return NULL;
    }
    
    private static function obtenerDpto($obj)
    {
        $dpto = new Dpto($obj->id, $obj->nombre);
        $dpto->setDescripcion($obj->descripcion);
        $dpto->setDptoPadre($obtenerPorId($obj->idDptoPadre));
            
        $this->obtenerDptosHijos($dpto);

        return $dpto;
    }
    
    private function obtenerDptosHijos(Dpto $dptoPadre) {
        if ($result = $this->mysqli->query("SELECT * FROM 'dpto' 
				WHERE idDptPadre='".$dptoPadre->getId()."'")) {
            while ($obj = $result->fetch_object()) {
                $this->obtenerDpto();
            }
		}
    }
    
    
    /**
     * Obtiene un listado, por niveles, de los departamentos 
     * registrados.
     *
     * @return array
     */
    public function obtenerListado()
    {
        $dptos = NULL;
        if ($result = $this->mysqli->query("SELECT * FROM dpto")) {
            while ($obj = $result->fetch_object()) {
                //$dptos[] = $this->obtenerDpto($obj);
                $dpto = new Dpto($obj->id, $obj->nombre);
                $dpto->setDescripcion($obj->descripcion);
                //$dpto->setDptoPadre($obj->);
                $dptos[] = $dpto;
            }            
        } else {
            echo mysqli_error($this->mysqli); 
        }
        return $dptos;
    }
    
    //Métodos mágicos
    
    public function __sleep()
    {
        //$this->mysqli->close(); 
    }
    
    public function __wakeup()
    {
        $this->conectar();
    }
    
}

?>